﻿using System;
using System.Diagnostics;

namespace kill1C.Utils
{
    static class Proc
    {
        public static void KillNoWindowInstance()
        {
            try
            {
                Process[] processes = Process.GetProcesses();

                foreach (Process p in processes)
                {
                    if (p.ProcessName.Contains("1c"))
                    {
                        //Нашел процесс 1С

                        int i = -1;
                        try
                        {
                            i = (int)p.MainWindowHandle;
                        }
                        catch { }

                        if (i == -1 || i == 0)
                        {
                            //Окно невидимо

                            Log.Write("Найден зависший процесс 1С с PID = " + p.Id + " SID = " + p.SessionId + " MainWindowHandle = " + i);

                            if (p.SessionId == AppProc.SID)
                            {
                                Log.Write("Процесс 1С c PID = " + p.Id + " SID = " + p.SessionId + " запущен текущим пользователем ПЫТАЮСЬ УБИТЬ");
                                string str = "Процесс 1С c PID = " + p.Id + " SID = " + p.SessionId;
                                try
                                {
                                    p.Kill();
                                    Log.Write(str + " УБИТ");
                                }
                                catch (Exception ex)
                                {
                                    Log.Write(str + " НЕ УДАЛОСЬ УБИТЬ. " + ex.Message);
                                }
                            }
                        }
                    }

                    try
                    {
                        p.Dispose();
                    }
                    catch (Exception ex)
                    {
                        Log.Write("Ошибка при попытке p.Dispose(). " + ex.Message);
                    }
                }
            }
            catch (Exception ex)
            {
                Log.Write(ex.Message);
            }
        }
    }
}
